package net.oschina.simpleplus.redis;

import net.oschina.simpleplus.redis.JRedisShard;

/**
 *当业务的需要在中途扩展redis实例  CustFixedRedisSerJRedisShard  算法的拓展
 */
public class CustAddRedisSerJRedisShard extends JRedisShard{

	private int prevSize = 12;//扩容之前的实例数
	
	public CustAddRedisSerJRedisShard(int prevSize) {
		super();
		this.prevSize = prevSize;
	}

	@Override
	public int shard(byte[] key) {
		long userId = findUserId(key);
		//这个 扩容逻辑自己可以自己去重写
		if(userId < Integer.MAX_VALUE >> 2){
			return (int)(userId % prevSize);
		}
		
		return (int) (userId % (size - prevSize)) + prevSize;
	}
	
	private long findUserId(byte[] key){
		String s = new String(key);
		String[] ss = s.split("_");
		return Long.parseLong(ss[ss.length - 1]);
	}

	@Override
	public void init(int size) {
		super.init(size);
		if(size <= prevSize){
			throw new RuntimeException("现在的redis实例数量低于原来的实例数量");
		}
	}
	
	
}
